﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Configuracion.Empresa
{
    public class dbo_Cat_Empresa
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_Cat_Empresa(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT

        public Respuesta Insert_Empresa(
            	        
	        string Razon_Social,
	        string Nombre_Contacto,
	        string Puesto_Contacto,
	        string Telefono_Contacto,
	        string Correo_Contacto,
	        bool EsActiva	        
        )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Cat_Empresa
                             (
                                Id_Empresa,
	                            RFC,
	                            Razon_Social,
	                            Nombre_Contacto,
	                            Puesto_Contacto,
	                            Telefono_Contacto,
	                            Correo_Contacto,
	                            EsActiva,
	                            Fecha_Alta,
	                            Usuario_Alta,
	                            Fecha_Mantto,
	                            Usuario_Mantto
                             )
                             VALUES
                             (
                                IIF(DCount('*', 'dbo_Cat_Empresa') = 0, 1, DMax('Id_Empresa', 'dbo_Cat_Empresa') + 1),
                                '@@RFC',
	                            '@@Razon_Social',
	                            '@@Nombre_Contacto',
	                            '@@Puesto_Contacto',
	                            '@@Telefono_Contacto',
	                            '@@Correo_Contacto',
	                            @@EsActiva,
	                            NOW(),
                                '@@Usuario_Alta',
                                NOW(),
                                '@@Usuario_Mantto'
                             )";

                Query = Query.Replace("@@RFC", this._RFC);
                Query = Query.Replace("@@Razon_Social", Razon_Social);
                Query = Query.Replace("@@Nombre_Contacto", Nombre_Contacto);
                Query = Query.Replace("@@Puesto_Contacto", Puesto_Contacto);
                Query = Query.Replace("@@Telefono_Contacto", Telefono_Contacto);
                Query = Query.Replace("@@Correo_Contacto", Correo_Contacto);

                if (EsActiva)
                    Query = Query.Replace("@@EsActiva", "1");
                else
                    Query = Query.Replace("@@EsActiva", "0");
                
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                return SrvDB.ExecuteQuery_Insert(Query);

                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }            
        }

        #endregion

        #region UPDATE

        public Respuesta Update_Empresa_Por_Id(
            object Id,

           string Razon_Social,
            string Nombre_Contacto,
            string Puesto_Contacto,
            string Telefono_Contacto,
            string Correo_Contacto,
            bool EsActiva
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Empresa SET
                                        
	                                Razon_Social = '@@Razon_Social',
	                                Nombre_Contacto = '@@Nombre_Contacto',
	                                Puesto_Contacto = '@@Puesto_Contacto',
	                                Telefono_Contacto = '@@Telefono_Contacto',
	                                Correo_Contacto = '@@Correo_Contacto',
	                                EsActiva = @@EsActiva,
                                    Fecha_Mantto = NOW(),
                                    Usuario_Mantto = '@@Usuario_Mantto'

                                 WHERE Id_Empresa = @@Id";
                                
                Query = Query.Replace("@@RFC", this._RFC);
                Query = Query.Replace("@@Razon_Social", Razon_Social);
                Query = Query.Replace("@@Nombre_Contacto", Nombre_Contacto);
                Query = Query.Replace("@@Puesto_Contacto", Puesto_Contacto);
                Query = Query.Replace("@@Telefono_Contacto", Telefono_Contacto);
                Query = Query.Replace("@@Correo_Contacto", Correo_Contacto);
                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                if (EsActiva)
                    Query = Query.Replace("@@EsActiva", "1");
                else
                    Query = Query.Replace("@@EsActiva", "0");

                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                return SrvDB.ExecuteQuery_Update(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region DELETE

        public Respuesta Delete_Empresa_Por_Id(
            object Id
        )
        {
            try
            {
                string Query = @"DELETE FROM dbo_Cat_Empresa 
                                    WHERE Id_Empresa = @@Id";

                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Delete(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region SELECT

        public DataTable Get_Empresa_Por_Id(object Id)
        {

            string Query = "SELECT * FROM dbo_Cat_Empresa WHERE Id_Empresa = @@Id";
            Query = Query.Replace("@@Id", ((Int32)Id).ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Empresa_Por_Nombre(string Nombre)
        {

            string Query = "SELECT * FROM dbo_Cat_Empresa WHERE Nombre = '@@Nombre' AND RFC = '@@RFC'";
            Query = Query.Replace("@@Nombre", Nombre);
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Empresas()
        {
            string Query = "SELECT * FROM dbo_Cat_Empresa WHERE RFC = '@@RFC'";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report()
        {
            string Query = @"

                SELECT 
                
                    A1.Id_Empresa,
                    A1.RFC,
                    A1.Razon_Social,
                    A2.Calle,
                    A2.Num_Ext,
                    A2.Num_Int,
                    A2.Colonia,
                    A2.CP,
                    A4.Nombre AS Estado,
                    A3.Nombre AS Pais,
                    A2.Municipio,
                    A1.Telefono_Contacto,
                    'Calle ' + A2.Calle + ' No. ' + A2.Num_Ext + ' ' + A2.Num_Int + ', Colonia ' + A2.Colonia + ' C.P. ' + A2.CP + ' ' + A3.Nombre + ' ' + A4.Nombre AS Direccion
    
                FROM 

                (((dbo_Cat_Empresa AS A1
                    INNER JOIN dbo_Cat_Sucursal AS A2 ON A2.RFC = A1.RFC)
                    INNER JOIN dbo_Cat_SIIE_Pais AS A3 ON A3.Id_SIIE_Pais = A2.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Estado AS A4 ON A4.Id_SIIE_Estado = A2.Id_Estado)

                 WHERE A1.RFC = '@@RFC' AND A2.Nombre = 'Matriz'
            ";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion
    }
}
